Present technology allows multiple users to access one set of data via a network. Capability to access simultaneously large bodies of message data improves the efficiency of this technological development.
In order to maintain data integrity, no two users may modify data, for example message data in an email system, at the same time. The present technology utilizes locks to serialize data access to one user at a time. To promote the most concurrent access to message data, locks are placed with the finest granularity practical. The difficulty with placing extremely fine grained locks, for example locks on every word of a message data, is the need for single processing entities to obtain and hold multiple locks during the processing of a message. If the granularity of locks within a message system is too fine grained, this leads to deadlock situations.
A deadlock is a case where one thread of processing holds a lock and, at the same time, requires a lock held by another thread. In addition to holding the lock that the first thread requires, the second thread, in turn, requires the lock that the first thread holds. Without external intervention, this is an unresolvable situation where the processing of neither thread can progress. In addition, deadlock detection and external intervention slows message processing considerably, thus making the deadlock detection process inefficient.
A goal of the idealized message processing then is to minimize deadlock conditions, while allowing many threads of processing to access message data or message data infrastructure at the same time, thus improving data concurrency.